// 测试视频发布相关接口
const axios = require('axios');
const fs = require('fs');
const path = require('path');

// 基础配置
const BASE_URL = 'http://localhost:3000/api/v1';
const AUTH_URL = 'http://localhost:3000/api/v1/auth';

// 测试账号信息（根据实际情况修改）
const TEST_USER = {
  username: 'user',
  password: '123456'
};
let token = '';
let videoId = '';

// 测试结果记录
const testResults = [];

// 日志函数
function log(message) {
  console.log(`[${new Date().toISOString()}] ${message}`);
  testResults.push(`[${new Date().toISOString()}] ${message}`);
}

// 登录获取token
async function login() {
  log('开始测试: 登录获取认证令牌');
  try {
    log(`尝试使用账号 ${TEST_USER.username} 登录`);
    
    const response = await axios.post(`${AUTH_URL}/login`, {
      username: TEST_USER.username,
      password: TEST_USER.password
    }, {
      headers: {
        'Content-Type': 'application/json'
      }
    });
    
    log(`登录响应状态码: ${response.status}`);
    log(`登录响应数据: ${JSON.stringify(response.data)}`);
    
    if (response.data.success) {
      // 根据实际响应结构获取token
      token = response.data.data.tokens?.accessToken || response.data.data.token || response.data.token;
      log(`✅ 登录成功，获取到token`);
      return true;
    } else {
      log(`❌ 登录失败: ${response.data.message || '未知错误'}`);
      return false;
    }
  } catch (error) {
    log(`❌ 登录请求失败: ${error.message}`);
    if (error.response) {
      log(`响应状态码: ${error.response.status}`);
      log(`响应数据: ${JSON.stringify(error.response.data)}`);
    } else if (error.request) {
      log(`请求已发送但未收到响应`);
    }
    return false;
  }
}

// 测试发布视频
async function testCreateVideo() {
  log('\n开始测试: 发布视频');
  try {
    const response = await axios.post(`${BASE_URL}/videos`, {
      title: '测试视频标题',
      description: '这是一个测试视频描述，用于API测试',
      video_url: 'https://example.com/test-video.mp4',
      cover_url: 'https://example.com/test-cover.jpg',
      duration: 120,
      category_id: 1,
      video_type_id: 1,
      tags: [1, 2]
    }, {
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      }
    });
    
    if (response.data.success) {
      videoId = response.data.data.video.id;
      log(`✅ 视频发布成功，视频ID: ${videoId}`);
      log(`视频信息: ${JSON.stringify(response.data.data.video, null, 2)}`);
      return true;
    } else {
      log(`❌ 视频发布失败: ${response.data.message}`);
      return false;
    }
  } catch (error) {
    if (error.response) {
      log(`❌ 视频发布请求失败: ${error.response.data.message || error.message}`);
      log(`响应详情: ${JSON.stringify(error.response.data)}`);
    } else {
      log(`❌ 视频发布请求失败: ${error.message}`);
    }
    return false;
  }
}

// 测试更新视频
async function testUpdateVideo() {
  if (!videoId) {
    log('❌ 跳过更新视频测试: 没有有效的视频ID');
    return false;
  }
  
  log('\n开始测试: 更新视频');
  try {
    const response = await axios.put(`${BASE_URL}/videos/${videoId}`, {
      title: '更新后的测试视频标题',
      description: '这是更新后的测试视频描述',
      cover_url: 'https://example.com/updated-cover.jpg',
      category_id: 2,
      video_type_id: 2,
      tags: [2, 3, 4]
    }, {
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      }
    });
    
    if (response.data.success) {
      log(`✅ 视频更新成功，视频ID: ${videoId}`);
      log(`更新后的视频信息: ${JSON.stringify(response.data.data.video, null, 2)}`);
      return true;
    } else {
      log(`❌ 视频更新失败: ${response.data.message}`);
      return false;
    }
  } catch (error) {
    if (error.response) {
      log(`❌ 视频更新请求失败: ${error.response.data.message || error.message}`);
      log(`响应详情: ${JSON.stringify(error.response.data)}`);
    } else {
      log(`❌ 视频更新请求失败: ${error.message}`);
    }
    return false;
  }
}

// 测试获取用户视频列表
async function testGetUserVideos() {
  log('\n开始测试: 获取用户视频列表');
  try {
    const response = await axios.get(`${BASE_URL}/users/me/videos`, {
      headers: {
        'Authorization': `Bearer ${token}`
      },
      params: {
        page: 1,
        limit: 10
      }
    });
    
    if (response.data.success) {
      log(`✅ 获取用户视频列表成功`);
      log(`视频数量: ${response.data.data.videos.length}`);
      log(`分页信息: ${JSON.stringify(response.data.data.pagination)}`);
      return true;
    } else {
      log(`❌ 获取用户视频列表失败: ${response.data.message}`);
      return false;
    }
  } catch (error) {
    if (error.response) {
      log(`❌ 获取用户视频列表请求失败: ${error.response.data.message || error.message}`);
    } else {
      log(`❌ 获取用户视频列表请求失败: ${error.message}`);
    }
    return false;
  }
}

// 测试删除视频
async function testDeleteVideo() {
  if (!videoId) {
    log('❌ 跳过删除视频测试: 没有有效的视频ID');
    return false;
  }
  
  log('\n开始测试: 删除视频');
  try {
    const response = await axios.delete(`${BASE_URL}/videos/${videoId}`, {
      headers: {
        'Authorization': `Bearer ${token}`
      }
    });
    
    if (response.data.success) {
      log(`✅ 视频删除成功，视频ID: ${videoId}`);
      return true;
    } else {
      log(`❌ 视频删除失败: ${response.data.message}`);
      return false;
    }
  } catch (error) {
    if (error.response) {
      log(`❌ 视频删除请求失败: ${error.response.data.message || error.message}`);
    } else {
      log(`❌ 视频删除请求失败: ${error.message}`);
    }
    return false;
  }
}

// 保存测试结果到文件
function saveTestResults() {
  const resultsDir = path.join(__dirname);
  const resultsFile = path.join(resultsDir, 'test_video_publish_results.md');
  
  // 添加测试结果标题和总结
  const summary = `# 视频发布接口测试结果

测试时间: ${new Date().toISOString()}

## 测试结果摘要
- 登录: ${testResults.some(line => line.includes('✅ 登录成功')) ? '✅ 成功' : '❌ 失败'}
- 发布视频: ${testResults.some(line => line.includes('✅ 视频发布成功')) ? '✅ 成功' : '❌ 失败'}
- 更新视频: ${testResults.some(line => line.includes('✅ 视频更新成功')) ? '✅ 成功' : '❌ 失败'}
- 获取用户视频列表: ${testResults.some(line => line.includes('✅ 获取用户视频列表成功')) ? '✅ 成功' : '❌ 失败'}
- 删除视频: ${testResults.some(line => line.includes('✅ 视频删除成功')) ? '✅ 成功' : '❌ 失败'}

## 详细测试日志

${testResults.join('\n')}
`;
  
  try {
    fs.writeFileSync(resultsFile, summary);
    console.log(`\n✅ 测试结果已保存到: ${resultsFile}`);
  } catch (error) {
    console.error(`❌ 保存测试结果失败: ${error.message}`);
  }
}

// 主测试函数
async function runTests() {
  console.log('====================================');
  console.log('开始执行视频发布相关接口测试');
  console.log('====================================');
  
  try {
    // 1. 登录获取token
    const loginSuccess = await login();
    if (!loginSuccess) {
      console.log('登录失败，无法继续测试');
      saveTestResults();
      return;
    }
    
    // 2. 测试发布视频
    await testCreateVideo();
    
    // 3. 测试更新视频
    await testUpdateVideo();
    
    // 4. 测试获取用户视频列表
    await testGetUserVideos();
    
    // 5. 测试删除视频
    await testDeleteVideo();
    
  } catch (error) {
    log(`❌ 测试过程中发生未预期错误: ${error.message}`);
  } finally {
    // 保存测试结果
    saveTestResults();
    
    console.log('====================================');
    console.log('视频发布相关接口测试执行完毕');
    console.log('====================================');
  }
}

// 执行测试
runTests();